perm filename MSSIO.FAI[NEW,LCS]11 blob
sn#493256 filedate 1980-01-18 generic text, type T, neo UTF8
TITLE MSSIO ; ********* JUN 8,74 *********
;; INTERNAL GETFI2,FASTI2,LOOP
INTERNAL GETFI2,FASTI2
INTERNAL LOOK,LOOKD,LOOKF,PAC,UNPAC,LOOKX,LOOKL
INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
ENTRY TYPWRD,TYPSTR,TYPINT,TYPCRLF,TYPFLT,TYPCHR
;TYPES A WORD, STRING, CRLF, INTEGER, FLTING PT., TYPE CHAR STRING(WD CNT)
CH3←13
CH←12
CH2←11
BLKS←←=1
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
REGS: BLOCK 20
DIR: BLOCK 4
;CALL PUTEXT(<FILE>,<EXT>)
PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
PUSHJ 17,INTFIL
SETZM DIR+2
SETZM DIR+3
ENTER CH2,DIR
ERROR <ENTER FAILED>
JRA 16,2(16)
;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
EXTOUT: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
OUTPUT CH2,COM
STATZ CH2,740000
ERROR <WRITE ERROR>
JRA 16,2(16)
INTFIL: MOVEI REGS ; INITS DSK
BLT REGS+3
INIT CH2,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
INTF4: MOVE 0,FILNAM#
MOVEM 0,FN#
MOVE 1,[POINT 7,FN]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTF1: ILDB 0,1
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: HRLZI REGS
BLT 3
MOVE 0,EXTNAM#
MOVEM 0,EX#
MOVE 1,[POINT 7,EX]
EXTF3: MOVE 2,[POINT 6,DIR+1]
SETZM DIR+1
MOVEI 3,5
EXTF1: ILDB 0,1
CAIN 0," "
JRST EXTF2
SUBI 0,40
IDPB 0,2
SOJG 3,EXTF1
EXTF2: HRLZI REGS
BLT 3
POPJ 17,
COM: OCT 0,0
BLKNUM: 0
;CALL FINEXT
FINEXT: 0
CLOSE CH2,0
STATZ CH2,740000
ERROR <ERROR AFTER CLOSE>
RELEASE CH2,0
JRA 16,0(16)
;CALL GETEXT(<FILE>,<EXT>)
GETEXT: 0
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
PUSHJ 17,INTFX
SETZM DIR+3
SETZM DIR+2
LOOKUP CH,DIR
ERROR <LOOKUP FAILED>
JRA 16,2(16)
INTFX: PUSHJ 17,INITCH
JRST INTF4
INITCH: MOVEI REGS ;INITS DSK FOR INPUT
BLT REGS+3
INIT CH,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
POPJ 17,
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
EXTIN: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH,COM
STATZ CH,740000
0
JRA 16,2(16)
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTINUE
JRA 16,1(16)
;CALL GETFI2(<FILE>,<0 OR -1>) 0=DAT,LCS -1=WHERE YOU ARE., -2=MSS,MUS(HELP)
GETFI2: 0
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,PPNW#
PUSHJ 17,INTFIZ
MOVE 0,[SIXBIT/DMD/]
MOVEM 0,DIR+1
GETFL: JSA 16,LKUP
SKIPA
JRST GETF3
SETZM DIR+1
JSA 16,LKUP
SKIPA
GETF3: JRA 16,2(16)
MOVEI 1
MOVEM @1(16) ;SEND BACK A 1 IN 2ND ARGUMENT IF FILE NOT FOUND.
JRA 16,2(16)
LKUP: 0
SETZM DIR+2
SETZM DIR+3
SKIPE PPNW ;0=DAT,LCS NON-ZERO = WHERE EVER YOU ARE
JRST LUP
MOVE 0,[SIXBIT/DATLCS/]
JRST LUP3
LUP: MOVN 0,PPNW
CAIE 0,2 ;-2=MSS,MUS
JRST LUP2
MOVE 0,[SIXBIT/MSSMUS/]
LUP3: MOVEM 0,DIR+3 ;PUTS AWAY THE PPN
LUP2: LOOKUP CH3,DIR
JRA 16,0(16)
JRA 16,1(16)
INTFIZ: MOVEI REGS ;INITS DSK FOR INPUT
BLT REGS+3
INIT CH3,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
JRST INTF4
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
FASTI2: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
JRA 16,2(16)
;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .DMD, LOOKX FOR (.EXT)
LOOKX: 0
MOVE 0,@1(16)
MOVEM 0,FILNAM
PUSHJ 17,INTFIQ
MOVE 0,DIR
JRST LOOK1
LOOKF: 0
MOVSI 0,'DMD'
JRST LOOK1
LOOKD: 0
MOVSI 0,'DAT'
JRST LOOK1
LOOK: 0
MOVEI 0,0
LOOK1: MOVEM 0,DIR+1
MOVE 0,@(16)
MOVEM 0,FILNAM
PUSHJ 17,INTFIQ
SETZM DIR+2
SETZM DIR+3
LOOKUP CH,DIR
TDZA 0,0
NPP: MOVNI 0,1
JRA 16,1(16)
LOOKL: 0 ;FUNCTION LOOKL(FILENAME) .LIB ON LIB,XXX
MOVE 0,@(16)
MOVEM 0,FILNAM
PUSHJ 17,INTFIZ ;INIT DSK, CH3
MOVSI 0,'LIB' ;USE .LIB EXTENSION
MOVEM 0,DIR+1
SETZM DIR+2
GETPPN 0,
MOVE 1,[SIXBIT/LIB /] ;FOR LIBRARY AREAS (FOR CODE 11)
HLL 0,1
MOVEM DIR+3 ;NOW PPN IS LIB,XXX WHERE XXX IS YOU.
SETZ 0, ;SET NOT-FOUND FLAG
LOOKUP CH3,DIR ;NOW GET THE .LIB FILE ON YOUR AREA ONLY
JRA 16,1(16)
JRST NPP ;GO SET FOUND FLAG AND RETURN
;;INTFIQ: MOVEI REGS ;INITS DSK FOR INPUT
;; BLT REGS+3
;; INIT CH,17
;; SIXBIT/DSK/
;; 0
;; HALT .-3
; ERROR <CAN'T INIT DSK!>
INTFIQ: PUSHJ 17,INITCH ;GO INIT DSK
;;INTF4: MOVE 0,FILNAM#
;; MOVEM 0,FN#
;; MOVE 1,[POINT 7,FN]
MOVE 1,[POINT 7,FILNAM#]
MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTL1: ILDB 0,1
;; CAIN 0," "
;; JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTL1
INTL2: JRST EXTF2
PAC: 0 ;CALL PAC(PW,AR)
MOVEI 4,@1(16) ; ******* USES AC'S 4,5,6 ********
ADDI 4,2
HRR 5,@4 ;SIZE IS 12 BITS
LSHC 5,-10
SOJ 4,
HRR 5,@4
LSHC 5,-16
SOJ 4,
HRR 5,@4
LSHC 5,-16
MOVEM 6,@0(16)
JRA 16,2(16)
UNPAC: 0 ;CALL UNPAC(PW,AR)
HRRZ 1,1(16)
ADDI 1,2
MOVE 2,@0(16)
LSHC 2,-10
ASH 3,-34
MOVEM 3,@1
SOJ 1,
LSHC 2,-16
ASH 3,-26
MOVEM 3,@1
SOJ 1,
LSHC 2,-16
ASH 3,-26
MOVEM 3,@1
JRA 16,2(16)
TYPSTR: 0 ;CALL TYPSTR(STRING)
OUTSTR @(16) ;TYPES OUT A STRING
JRA 16,1(16) ;THIS WILL TYPE IN GROUPS OF 5 CHARS ALWAYS!!!
TYPCHR: 0 ;CALL TYPCHR(STRING,CHAR COUNT)
SKIPL 1,@1(16)
JRST TYPCH2
OUTSTR @(16)
TYPCH1: JRA 16,2(16)
TYPCH2: MOVSI 2,440700
HRRI 2,@(16)
TYPCH3: SOJL 1,TYPCH1
ILDB 3,2
OUTCHR 3
JRST TYPCH3
TYPWRD: 0 ;CALL TYPWRD(WORD) ASSUMES ≤5 CHARS.
MOVSI 2,440700
HRRI 2,@(16)
MOVEI 1,5
TYPWR1: ILDB 3,2
OUTCHR 3
SOJG 1,TYPWR1
JRA 16,1(16)
TYPCRLF: 0 ;CALL TYPCRLF TYPES A CRLF
OUTSTR [ASCIZ /
/]
JRA 16,(16)
TYPINT: 0 ;CALL TYPINT(INTEGER)
SKIPGE 1,@(16) ;TYPES OUT INTEGERS
OUTCHR ["-"]
MOVMS 1
PUSHJ 17,DECREC
JRA 16,1(16)
DECREC: IDIVI 1,=10
HRLM 2,(17)
SKIPE 1
PUSHJ 17,DECREC
HLRZ 1,(17)
ADDI 1,"0"
OUTCHR 1
POPJ 17,
TYPFLT: 0 ;CALL TYPFLT(F)
MOVM 4,@(16) ;NEEDS ACS 1→5 **** PRINTS ONLY TO 2 DECIS.
KIFIX 3,@(16)
FMPR 4,[100.0] ;TO GET THINGS TO RT. OF DEC.
;;*** CAUSES 199.997 TO PRINT AS 199 ** FADR 4,[0.5] ;FOR ROUND OFF.
KIFIX 4,4
IDIVI 4,=100 ;REMAINDER IS IN AC6
JUMPN 3,TYPFL1 ;JUMP IF LFT SIDE .NE.0
SKIPGE @(16) ;IS ORIGINAL NUM. NEG?
OUTCHR ["-"] ;YES
OUTCHR ["0"]
JRST .+3 ;PRINT A ZERO AND SKIP NEXT CALL
TYPFL1: JSA 16,TYPINT
JUMP 3
SKIPN 5 ;PRINT NO MORE IF ONLY ZEROS
JRA 16,1(16)
OUTCHR ["."] ;DECIMAL PT.
;; CAIGE 5,=100
;; OUTCHR["0"] ;FOR ZERO AFTER DECI
CAIGE 5,=10
OUTCHR["0"] ;FOR ZERO AFTER DECI
;; MOVE 3,5
;; IDIVI 3,=100
;; JUMPE 4,DECI ;LOOK AT REMAINDER, JUMP IF NON-ZERO
MOVE 3,5
IDIVI 3,=10
SKIPE 4 ;LOOK AT REMAINDER, JUMP IF NON-ZERO
MOVE 3,5 ;ELSE PRINT ALL 3 DIGITS
DECI: JSA 16,TYPINT
JUMP 3
JRA 16,1(16)
END